"""
@Time : 2022/3/30
@Author : 16088
@File : 键位监听判断
@Description : 通过键位对应预先编译的几个类别进行判断
"""

import os
import shutil
import keyboard

"""
第一步，根据文件后缀移动到相对应格式目录下
"""

# 提升作用域，可以全局使用此变量
# 手动定义
# real_path = 'D:\\test2\\'
# listdir = os.listdir(real_path)
# 窗口定义
filepath = str(input(r'请输入要分类的目录：'))
real_path = filepath + '\\'
listdir = os.listdir(real_path)
# 扫描本地文件 filelist 获取分类和键位
num_lists = []
type_lists = []
with open('./filelists.txt', 'r', encoding='utf-8') as f:
    filelist = f.readlines()
    for file in filelist:
        num = file.split(' ')[0]
        filetype = file.split(' ')[1].strip()
        num_lists.append(num)
        type_lists.append(filetype)

sum_lists = []
for tl, nl in zip(type_lists, num_lists):
    sum_lists.append('{{ ' + nl + ' ==>> ' + tl + ' }}')

template_filepath = real_path + '同名文件自判断'


# 创建目录并移动文件方法
def create_filepath(filename, old_filepath, new_filepath):
    # 判断目标文件夹是否存在，不存在则创建
    if not os.path.exists(new_filepath):
        os.mkdir(new_filepath)
        # print(r'创建文件夹:{}'.format(new_filepath))
    else:
        # 判断有没有同名文件，没有则移动，有就pass
        if not os.path.exists(new_filepath + "\\" + filename):
            try:
                shutil.move(old_filepath, new_filepath)
            except:
                pass
            else:
                print(r"文件从【{}】移动到【{}】".format(old_filepath, new_filepath))
                print("================确认操作，请按回车！！！否则无法判断下一个文件================")
                print('\t')
        else:
            if not os.path.exists(template_filepath):
                os.mkdir(template_filepath)
            try:
                shutil.move(old_filepath, template_filepath)
            except:
                pass
            else:
                print(f'同名文件自行判断')
                print("================确认操作，请按回车！！！否则无法判断下一个文件================")
                print('\t')


"""
    第二步：扫描文件名判断为何种类型
"""


# 执行移动操作
def move_file_to(filename, filetype):
    new_file_path = real_path + filetype
    old_file_path = real_path + filename
    create_filepath(filename, old_file_path, new_file_path)


# 监听按键，设置热键
def listen_keyboard(filename):
    for filetype, num in zip(type_lists, num_lists):
        keyboard.add_hotkey(num, move_file_to, args=(filename, filetype), suppress=False)
    keyboard.wait('enter')


def move_file_by_key():
    count = 1
    for filename in listdir:
        if os.path.isfile(real_path + filename):
            # filetype = file.split('.')[1]
            print(f"👇👇👇判断第 #{count} 个文件【{filename}】,并选择以下按键以便分类👇👇👇")
            print("\t")
            print(sum_lists)
            listen_keyboard(filename)
            count += 1


if __name__ == '__main__':
    move_file_by_key()
